<!doctype html> <html> <head> <meta charset="utf-8"> <title>Pixi.js - Basic Usage</title> <style> * { box-sizing: border-box; } #view { position: absolute; top: 0; left: 0; z-index: -1; } </style> <script src="../../bin/pixi.dev.js"></script> <script src="stats.min.js"></script> </head> <body> <div id="wrapper"> <canvas id="view" width="960" height="720"></canvas> <div id="counter"></div> <label> <input type="checkbox" id="useSpriteBatch" /> Use SpriteBatch </label> </div> <script> // starting number based on renderer type var startingNum = 50, // create a texture from an image path tx1 = PIXI.Texture.fromImage('bunny.png'), // create a sprite batch to contain our sprites container = new PIXI.SpriteBatch(), // get the counter element so we can update the text counter = document.getElementById('counter'), // tracker for mouse/touch down state isAdding = false, // we are going to fake some gravity in the update loop gravity = 0.75; // use nearest scaling so sprites are crisp and pixely PIXI.scaleModes.DEFAULT = PIXI.scaleModes.NEAREST; // create an new instance of a pixi stage var stage = new PIXI.Stage(0xFFFFFF); // create a renderer instance var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, { view: document.getElementById('view') }); // add our container to the root // stage.addChild(container); container = stage; // add the first bunnies! createBunnies(); // setup our tick method called each frame var stats = new Stats(); stats.domElement.style.position = 'absolute'; stats.domElement.style.top = '0'; stats.domElement.style.right = '0'; document.body.appendChild(stats.domElement); animate(); function animate() { stats.begin(); // start timer for next loop requestAnimationFrame(animate); // if we are adding bunnies, then do it! if (isAdding) { createBunnies(); } // go through each bunny and update it to dance a bit for (var j = 0; j < container.children.length; ++j) { var bunny = container.children[j]; bunny.position.x += bunny.speedX; bunny.position.y += bunny.speedY; bunny.speedY += gravity; if (bunny.position.x > renderer.width) { bunny.speedX *= -1; bunny.position.x = renderer.width; } else if (bunny.position.x < 0) { bunny.speedX *= -1; bunny.position.x = 0; } if (bunny.position.y > renderer.height) { bunny.speedY *= -0.85; bunny.position.y = renderer.height; if (Math.random() > 0.5) { bunny.speedY -= Math.random() * 6; } } else if (bunny.position.y < 0) { bunny.speedY *= -1; bunny.position.y = 0; } } renderer.render(stage); stats.end(); } renderer.view.addEventListener('mousedown', startAdd, false); renderer.view.addEventListener('touchstart', startAdd, false); renderer.view.addEventListener('mouseup', startEnd, false); renderer.view.addEventListener('touchend', startEnd, false); function startAdd() { isAdding = true; } function startEnd() { isAdding = false; } function createBunnies(num) { num = num || startingNum; for (var i = 0; i < num; ++i) { var bunny = new PIXI.Sprite(tx1); bunny.speedX = Math.random() * 5; bunny.speedY = (Math.random() * 5) - 5; bunny.anchor.set(0.5, 1); container.addChild(bunny); } counter.innerHTML = container.children.length + ' bunnies'; } </script> </body> </html>